<?php
require_once('includes/clases/Horario.php');
require_once('includes/clases/Grupo.php');
require_once('includes/clases/ConstantesCargaAcademica.php');
require_once('includes/clases/Logger.php');

class ManejoArchivoCargaGlobales{
	private $logger = null;
	private $accesoDatos = null;

	function __construct( $accesoDatos, $logger=null ) {
		if( $logger == null ){
			$this->logger = new Logger();
		}else{
			$this->logger = $logger;
		}
		$this->accesoDatos = $accesoDatos;
	}

	function leerArchivo( $archivo ){

        // Include PHPExcel_IOFactory
        require_once '../Classes/PHPExcel/IOFactory.php';

        /**
         * PHPExcel
         *
         * Copyright (C) 2006 - 2013 PHPExcel
         *
         * This library is free software; you can redistribute it and/or
         * modify it under the terms of the GNU Lesser General Public
         * License as published by the Free Software Foundation; either
         * version 2.1 of the License, or (at your option) any later version.
         *
         * This library is distributed in the hope that it will be useful,
         * but WITHOUT ANY WARRANTY; without even the implied warranty of
         * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
         * Lesser General Public License for more details.
         *
         * You should have received a copy of the GNU Lesser General Public
         * License along with this library; if not, write to the Free Software
         * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
         *
         * @category   PHPExcel
         * @package    PHPExcel
         * @copyright  Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)
         * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
         * @version    1.7.9, 2013-06-02
         */

        $valid = false;
        $types = array('Excel2007', 'Excel5');
        foreach ($types as $type) {
            $reader = PHPExcel_IOFactory::createReader($type);
            if ($reader->canRead($archivo)) {
                $valid = true;
                break;
            }
        }
        
        if($valid) {

            error_reporting(E_ALL);
            ini_set('display_errors', TRUE);
            ini_set('display_startup_errors', TRUE);

            define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');

            date_default_timezone_set('Europe/London');


            if (!file_exists( $archivo )) {
                exit("Error al cargar: No existe el archivo." . EOL);
            }

            $this->logger->log( EOL, date('H:i:s') , " Load from Excel2007 file", Logger::$INFO );
            $callStartTime = microtime(true);

            $objPHPExcel = PHPExcel_IOFactory::load( $archivo );

            $callEndTime = microtime(true);
            $callTime = $callEndTime - $callStartTime;
            $this->logger->log( 'Call time to read Workbook was ' . sprintf('%.4f',$callTime) . " seconds", Logger::$INFO );
            // Log memory usage
            $this->logger->log( date('H:i:s') . ' Current memory usage: ' . (memory_get_usage(true) / 1024 / 1024) . " MB", Logger::$INFO );

            return $objPHPExcel;

        } else {
            $this->logger->log( "Error archivo invalido.", Logger::$ERROR );
            return null;
        }
    }

	function guardar( $archivo ){
        if ($archivo["error"] > 0){
            $this->logger->log( "Error al guardar el archivo: " . $archivo['error'] , Logger::$ERROR );
            return null;
        }
        else{
            $this->logger->log( "Nombre: " . $archivo['name'], Logger::$INFO );
            $this->logger->log( "Tipo: " . $archivo['type'], Logger::$INFO );
            $this->logger->log( "Tama&ntilde;o: " . ($archivo["size"] / 1024) . " kB", Logger::$INFO );;
            $this->logger->log( "Carpeta temporal: " . $archivo['tmp_name'] , Logger::$INFO );
            /*ahora co la funcion move_uploaded_file lo guardaremos en el destino que queramos*/
            move_uploaded_file($archivo['tmp_name'], "cargas_academicas/" . $archivo['name']);
            return "cargas_academicas/" . $archivo['name'];
        }
    }

	function validaExisteSiguienteFila( $objPHPExcel, $siguienteFila ){
        $valor = $objPHPExcel->getActiveSheet()->getCell(ConstantesCargaAcademica::$COLUMNA_CLAVE . $siguienteFila)->getFormattedValue();
        return !($valor == "");
    }

	function parsearHorarios( $objPHPExcel, $fila, $grupo ){
    	$horarios = array();
    	$idGrupo = $grupo->id;
    	$salon = $objPHPExcel->getActiveSheet()->getCell( ConstantesCargaAcademica::$COLUMNA_SALON . $fila)->getValue();
    	$celdaInicio = ConstantesCargaAcademica::$COLUMNA_LUNES_INICIO . $fila;
    	$celdaFin = ConstantesCargaAcademica::$COLUMNA_LUNES_FIN . $fila;
    	$dia = ConstantesCargaAcademica::$DIA_LUNES;
    	$horario = $this->parsearHorario( $objPHPExcel, $idGrupo, $celdaInicio, $celdaFin, $dia, $salon );
    	if( $horario != null ){
        	array_push( $horarios, $horario );
        }
        $celdaInicio = ConstantesCargaAcademica::$COLUMNA_MARTES_INICIO . $fila;
    	$celdaFin = ConstantesCargaAcademica::$COLUMNA_MARTES_FIN . $fila;
    	$dia = ConstantesCargaAcademica::$DIA_MARTES;
    	$horario = $this->parsearHorario( $objPHPExcel, $idGrupo, $celdaInicio, $celdaFin, $dia, $salon );        
        if( $horario != null ){
        	array_push( $horarios, $horario );
        }
        $celdaInicio = ConstantesCargaAcademica::$COLUMNA_MIERCOLES_INICIO . $fila;
    	$celdaFin = ConstantesCargaAcademica::$COLUMNA_MIERCOLES_FIN . $fila;
    	$dia = ConstantesCargaAcademica::$DIA_MIERCOLES;
    	$horario = $this->parsearHorario( $objPHPExcel, $idGrupo, $celdaInicio, $celdaFin, $dia, $salon );        
        if( $horario != null ){
        	array_push( $horarios, $horario );
        }
        $celdaInicio = ConstantesCargaAcademica::$COLUMNA_JUEVES_INICIO . $fila;
    	$celdaFin = ConstantesCargaAcademica::$COLUMNA_JUEVES_FIN . $fila;
    	$dia = ConstantesCargaAcademica::$DIA_JUEVES;
    	$horario = $this->parsearHorario( $objPHPExcel, $idGrupo, $celdaInicio, $celdaFin, $dia, $salon );        
        if( $horario != null ){
        	array_push( $horarios, $horario );
        }
        $celdaInicio = ConstantesCargaAcademica::$COLUMNA_VIERNES_INICIO . $fila;
    	$celdaFin = ConstantesCargaAcademica::$COLUMNA_VIERNES_FIN . $fila;
    	$dia = ConstantesCargaAcademica::$DIA_VIERNES;
    	$horario = $this->parsearHorario( $objPHPExcel, $idGrupo, $celdaInicio, $celdaFin, $dia, $salon );        
        if( $horario != null ){
        	array_push( $horarios, $horario );
        }
        return $horarios;
    }

    function parsearHorario( $objPHPExcel, $idGrupo, $celdaInicio, $celdaFin, $dia, $salon){
    	$horario = new Horario();
        $horario->grupo = $idGrupo;
        $horario->inicio = $objPHPExcel->getActiveSheet()->getCell( $celdaInicio )->getFormattedValue();
        $horario->fin = $objPHPExcel->getActiveSheet()->getCell( $celdaFin )->getFormattedValue();
        $horario->dia = $dia;
        $horario->salon = $salon;
        if( $horario->inicio == null ){
        	return null;
        }
        return $horario;
    }

    function parsearGrupo( $objPHPExcel, $fila, $idTrimestre ){
        $grupo = new Grupo();        
        $grupo->grupo = $objPHPExcel->getActiveSheet()->getCell( ConstantesCargaAcademica::$COLUMNA_GRUPO . $fila)->getFormattedValue();
        $claveUEA = $objPHPExcel->getActiveSheet()->getCell( ConstantesCargaAcademica::$COLUMNA_CLAVE . $fila)->getFormattedValue();
        $grupo->uea =  $this->accesoDatos->db_obtener_id_uea_by_clave( $claveUEA );
        if( $grupo->uea == null ){
            $this->logger->log( "No se logro crear el grupo " . $grupo->grupo . ", ya que no existe la UEA con clave $claveUEA.", Logger::$ERROR );
            return null;
        }
        $grupo->profesor = null;
        $grupo->trimestre = $idTrimestre;
        return $grupo;
    }
}
?>